package dataediter;

import main.Resource;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.util.ArrayList;
import java.util.Date;

/**
 * 日志文件
 *
 * @author fdh
 */
public class MyLogWR extends FileWRBase {
    private String path;
    private Date date;
    public ArrayList<String> logList = new ArrayList<>();

    public MyLogWR(String path) throws Exception {
        if (!path.contains("." + Resource.MyLog.Maker.suffixName)) {
            throw new Exception("log文件错误:" + path);
        }
        this.path = path;
        date = new Date();
    }

    public MyLogWR() {
        this.path = Resource.MyLog.logPath;
        date = new Date();
    }

    // region 设置处理文件

    /**
     * 设置为默认路径下的文件姓名，不包含后缀名
     *
     * @param fileName
     */
    public void setFileName(String fileName) {
        this.path = Resource.MyLog.logPath + fileName + "." + Resource.MyLog.Maker.suffixName;
    }

    /**
     * 设置为指定文件路径
     *
     * @param path
     */
    public void setFilePath(String path) throws Exception {
        if (!path.contains("." + Resource.MyLog.Maker.suffixName)) {
            throw new Exception("log文件错误:" + path);
        }
        this.path = path;
    }

    /**
     * 设置默认路径下的文件，包含后缀名
     *
     * @param file
     */
    public void setFile(String file) throws Exception {
        if (!file.contains("." + Resource.MyLog.Maker.suffixName)) {
            throw new Exception("log文件错误:" + file);
        }
        this.path = Resource.MyLog.logPath + file;
    }
    //endregion

    //region 写入文件

    /**
     * 写入到log文件,会自动清空list
     *
     * @param list 内容
     */
    public void writeLogsToFile(ArrayList<String> list) {
        StringBuilder sb = new StringBuilder();
        ArrayList<String> allLine = readAll(path);

        if (allLine != null) {
            for (String s : allLine) {
                sb.append(s).append("\n");
            }
        }
        for (String s : list) {
            if (!logInfoCheck(s)) {
                date.setTime(System.currentTimeMillis());
                sb.append(date + " : " + s).append("\n");
            }
        }

        try (BufferedWriter bw = new BufferedWriter(new FileWriter(path))) {
            bw.write(sb.toString());
            list.clear();
            System.out.println("log文件写入成功:" + path);
        } catch (Exception e) {
            System.out.println("log文件写入错误:" + path);
        }
    }

    /**
     * 将内置的log存储结构写入到log文件
     */
    public void writeLogsToFile() {
        StringBuilder sb = new StringBuilder();
        ArrayList<String> preData = readAll(path);
        for (String s : preData) {
            sb.append(s).append("\n");
        }
        for (String s : logList) {
            if (!logInfoCheck(s)) {
                sb.append(s).append("\n");
            }
        }
        super.writeAllData(path, sb.toString());
        logList.clear();
    }

    /**
     * 检查log信息是否为无用信息,检查修改前后数据是否相同
     *
     * @param line
     * @return 修改前后数据是否相同
     */
    private boolean logInfoCheck(String line) {
        if (line.contains(Resource.MyLog.Maker.remindLineMaker))
            return false;
        int i = line.lastIndexOf(':');
        String a = line.substring(i + 1);
        String[] b = a.split("to");
        b[0] = b[0].trim();
        b[1] = b[1].trim();
        return b[0].equals(b[1]);
    }
    //endregion

    //region添加log数据

    /**
     * 添加log信息
     *
     * @param line 需要添加的信息
     */
    public void addLogInfo(String line) {
        date.setTime(System.currentTimeMillis());
        logList.add(date + " : " + line);
    }
    //endregion

    //region创建文件

    /**
     * 创建文件
     *
     * @param fileName 文件名字,不包含后缀名
     * @return 是否创建成功
     */
    @Override
    public boolean createFile(String fileName) {
        return super.createFile(Resource.MyLog.logPath + fileName + "." + Resource.MyLog.Maker.suffixName);
    }

    /**
     * 创建指定路径下的文件
     *
     * @param filePath 文件路径
     * @return 是否创建成功
     */
    public boolean createFileByPath(String filePath) {
        return super.createFile(filePath);
    }

    /**
     * 默认文件路径创建
     *
     * @return 是否创建成功
     */
    public boolean createFile() {
        return super.createFile(path);
    }
    //endregion

    // region 删除文件

    /**
     * 通过文件全名删除，包括后缀名
     *
     * @param file 路径
     * @return 是否删除
     */
    @Override
    public boolean delFile(String file) {
        return super.delFile(Resource.MyLog.logPath + file);
    }

    /**
     * 通过文件名删除，不包括后缀名
     *
     * @param fileName
     * @return 是否删除
     */
    public boolean delFileByName(String fileName) {
        return super.delFile(Resource.MyLog.logPath + fileName + "." + Resource.MyLog.Maker.suffixName);
    }
    //endregion
}
